#pragma once

#include <stdio.h>

#include "luster_ownership.hh"
#include "luster_status.hh"
#include "luster_string.hh"

namespace luster {

// 将 FILE* 包裹为新类型，以保证：
//
// - 默认构造为零。
// - 使用 FilePtr 的时候一定包含了 IDrop 的特化。
struct FilePtr {
	FILE *fp{};
};

luster_DROP(FilePtr, fp) {
	fclose(fp->fp);
}

Status mkdir_all(char const *path);

Status read_file(char const *path, StringBuffer *buf);

} // namespace luster
